<?php

namespace app\common;

class Constants
{
    // 超级用户ID
    const SUPER_USER_ID = 8934534;
    // 数据权限类型
    const DATA_SCOPE_ALL = 'ALL';
    const DATA_SCOPE_DEPT_CUSTOM = 'DEPT_CUSTOM';
    const DATA_SCOPE_DEPT_AND_SUB = 'DEPT_AND_SUB';
    const DATA_SCOPE_DEPT_CURRENT = 'DEPT_CURRENT';
    const DATA_SCOPE_SELF = 'SELF';
    const DATA_SCOPE_NONE = 'NONE';

    // 菜单类型
    const MENU_TYPE_MENU = 1;
    const MENU_TYPE_CATALOG = 2;
    const MENU_TYPE_EXTLINK = 3;
    const MENU_TYPE_IFRAME = 4;

    const MENU_ROOT_ID = 0;

    const MENU_PARAMS_NO = 0; // 菜单中表示关闭，禁止
    const MENU_PARAMS_YES = 1; // 菜单中表示打开，允许
    # 字典类型
    const DICT_TYPE_GENERAL = 1;
    const DICT_TYPE_QUERY = 2;
    const DICT_TYPE_FUNCTION = 3;

    # 菜单表存在性
    const MENU_TABLE_EXIST = 1;
    const MENU_TABLE_NOT_EXIST = 0;

    # 日志类型
    const LOG_TYPE_LOGIN = 1;
    const LOG_TYPE_OPERATE = 2;
    const LOG_TYPE_EXCEPTION = 3;

    # 多语言映射
    const LOCALE_MAP = [
        'zh-cn' => 'zh_CN',
        'en' => 'en_US',
        'ja' => 'ja_JP',
        'ko' => 'ko_KR',
        'ru' => 'ru_RU',
        'th' => 'th_TH',
        'vi' => 'vi_VN',
        'zh-tw' => 'zh_TW',
    ];
    const LANG_VERSION_CACHE_KEY = 'i18n_version';

    // 表的内置字段
    const TABLE_FIELD_ID = 'id'; // 主键字段
    const TABLE_FIELD_PID = 'pid'; // 父级字段
    const TABLE_FIELD_STATUS = 'status'; // 状态字段
    const TABLE_FIELD_SORT = 'sort'; // 排序字段
    const TABLE_FIELD_CREATE_TIME = 'create_time'; // 创建时间字段
    const TABLE_FIELD_UPDATE_TIME = 'update_time'; // 更新时间字段
    const TABLE_FIELD_DELETED_TIME = 'deleted_time'; // 删除时间字段
    const TABLE_FIELD_CREATE_ID = 'create_id'; // 创建人字段
    const TABLE_FIELD_UPDATE_ID = 'update_id'; // 更新人字段
    const TABLE_FIELD_DELETED_ID = 'deleted_id'; // 删除人字段
    const TABLE_FIELD_CREATE_DEPT = 'create_dept'; // 创建部门字段


    // 数据权限缓存Key的前缀
    const CACHE_USER_DATA_PERMISSION_PREFIX = 'user_data_permission_';
    // 功能权限缓存Key的前缀
    const CACHE_USER_PERMISSION_PREFIX = 'user_permission_';
    // 后端图形验证码缓存Key的前缀
    const ADMIN_CAPTCHA_KEY_PREFIX = 'admin_captcha_';
    // 语言翻译数据缓存
    const LANG_TRANSLATION_DATA_KEY = 'lang_translation_data_';
    // 用户详细完整信息缓存 Key
    const CACHE_USER_INFO_KEY = 'user_principal_';
    // 全局数据字典缓存 key
    const CACHE_DICT_KEY = 'admin_dict_';
    // 全局验证码缓存前缀
    const CACHE_VERIFICATION_CODE_KEY = 'verification_code_';



    # 一般翻译数据
    const COMMON_ROOT = 'common_root';
    const COMMON_SUCCESS = 'common_success';
    const COMMON_ERROR = 'common_error';

    # 系统级错误 (1xxxx)
    const E_SYS_SYSTEM_ERROR = 'e_sys_system_error'; // 系统级错误: 未被捕获的顶层 Exception，需紧急排查
    const E_SYS_DATABASE_ERROR = 'e_sys_database_error'; // 数据服务异常:数据库连接、查询、写入等严重错误
    const E_SYS_RUNTIME_EXCEPTION = 'e_sys_runtime_exception'; // 系统运行时异常: 运行时错误，如文件不存在、权限不足、内存溢出等
    const E_SYS_CACHE_ERROR = 'e_sys_cache_error'; // 缓存服务异常 Redis/Memcached 等连接或操作异常
    const E_SYS_SERVER_INTERNAL_ERROR = 'e_sys_server_internal_error'; // 服务器内部错误: 500 服务器内部错误，请联系管理员
    const E_COMMON_LOW_LEVEL_ERROR = 'e_common_low_level_error'; // 低级别错误，默认是不会作为异常抛出的，这里单独处理一下

    # 通用业务错误 (200xxx)
    const E_COMMON_INVALID_PARAM = 'e_common_invalid_param'; // 请求参数不合法 ValidateException，参数验证失败
    const E_COMMON_RECORD_NOT_FOUND = 'e_common_record_not_found'; // 您查找的记录不存在 ModelNotFoundException，查询结果为空
    const E_COMMON_REQUEST_METHOD_ERROR = 'e_common_request_method_error'; // 请求方法不支持 Http Method Not Allowed Exception
    const E_COMMON_FORBIDDEN = 'e_common_forbidden'; // 禁止访问 权限不足，用户尝试访问未授权资源
    const E_COMMON_UNAUTHENTICATED = 'e_common_unauthenticated'; // 请先完成登录 未登录或登录已失效
    const E_COMMON_ACTION_TOO_FREQUENT = 'e_common_action_too_frequent'; // 操作过于频繁，请稍后再试 接口被限流 (Rate Limiting)
    const E_COMMON_ACCESS_TOKEN_EXPIRED = 'e_common_access_token_expired'; // 访问令牌已过期
    const E_COMMON_ACCESS_TOKEN_INVALID = 'e_common_access_token_invalid'; // 访问令牌无效
    const E_COMMON_REFRESH_TOKEN_EXPIRED = 'e_common_refresh_token_expired'; // 访问令牌已过期
    const E_COMMON_REFRESH_TOKEN_INVALID = 'e_common_refresh_token_invalid'; // 访问令牌无效
    const E_COMMON_MULTI_LOGIN_FORBIDDEN = 'e_common_multi_login_forbidden'; // 您已经在其他客户端登录 禁止多端登录后，登录被禁止
    const E_COMMON_DATA_VALIDATION_FAILED = 'e_common_data_validation_failed'; // 数据验证失败
    const E_COMMON_TIMESTAMP_EXPIRED = 'e_common_timestamp_expired'; // 时间戳已过期
    const E_COMMON_NONCE_REPEAT = 'e_common_nonce_repeat'; // 疑似重放攻击
    const E_COMMON_APP_NOT_EXIST = 'e_common_app_not_exist'; // 应用授权不存在
    const E_COMMON_SIGNATURE_ERROR = 'e_common_signature_error'; // 签名错误

    const E_COMMON_LOAD_DATA_FAILED = 'e_common_load_data_failed'; // detail / getFormData 加载数据失败
    const E_COMMOM_ADD_DATA_FAILED = 'e_common_add_data_failed'; // 添加数据失败
    const E_COMMON_UPDATE_DATA_FAILED = 'e_common_update_data_failed'; // 更新数据失败
    const E_COMMON_DELETE_DATA_FAILED = 'e_common_delete_data_failed'; // 删除数据失败
    const E_COMMON_SORT_DATA_FAILED = 'e_common_sort_data_failed'; // 排序数据失败
    const E_COMMON_HAS_CHILDREN_DATA = 'e_common_has_children_data'; // 存在子级数据
    const E_COMMON_CLEAN_RUNTIME_DATA_FAILED = 'e_common_clean_runtime_data_failed'; // 清理运行时数据失败
    const E_COMMON_GEN_VUE_NOT_TURN_OFF = 'e_common_gen_vue_not_turn_off'; // 不允许关闭生成前端代码

    # 用户与权限模块 (201xxx)
    const E_AUTH_USERNAME_PASSWORD_WRONG = 'e_auth_username_password_wrong'; // 用户名或密码错误 登录时校验失败
    const E_AUTH_USER_DISABLED = 'e_auth_user_disabled'; // 您的账户已被禁用 用户状态为“禁用”
    const E_AUTH_VERIFICATION_CODE_ERROR = 'e_auth_verification_code_error'; // 验证码错误
    const E_AUTH_VERIFICATION_CODE_NOT_MATCH = 'e_auth_verification_code_not_match'; // 验证码不匹配
    const E_AUTH_VERIFICATION_CODE_EXPIRED = 'e_auth_verification_code_expired'; // 验证码已过期
    const E_AUTH_PASSWORD_NOT_MATCH = 'e_auth_password_not_match'; // 密码不匹配
    const E_NOT_CHANGE_SUPER_USER = 'e_auth_not_change_super_user'; // 不能修改超级管理员信息
    const E_AUTH_USERNAME_EXISTS = 'e_auth_username_exists'; // 该用户名已被使用 创建用户时用户名冲突
    const E_AUTH_ROLE_NOT_FOUND = 'e_auth_role_not_found'; // 指定的角色不存在 为用户分配角色时，角色ID无效
    const E_AUTH_PASSWORD_TOO_WEAK = 'e_auth_password_too_weak'; // 密码强度太弱 密码不符合预设的复杂度规则

    # i18n 多语言
    const E_I18N_NOT_FOUND_NAMESPACE = 'e_i18n_not_found_namespace'; // 为发现命名空间


    # 通用验证模块 (202xxx)
    const  E_VALIDATE_NAME_EXISTS = 'e_validate_name_exists'; // 角色名称已存在 创建角色时名称冲突
    const  E_VALIDATE_IN_USE = 'e_validate_in_use';  // 色正在被使用，无法删除 删除角色前需与所有用户解绑角
    const E_VALIDATE_HAS_CHILDREN = 'e_validate_has_children'; // 此菜单包含子菜单，无法删除 删除菜单前需先删除其所有子菜单
    const E_VALIDATE_TYPE_EXISTS = 'e_validate_type_exists'; // 字典类型已存在 创建字典类型时标识冲突

    const E_VALIDATE_REQUIRED = 'e_validate_required'; // {:attr} 不能为空
    const E_VALIDATE_MUST_ARRAY = 'e_validate_must_array'; // {:attr} 必须是数组格式
    const E_VALIDATE_MUST_NUMBER = 'e_validate_must_number'; // {:attr} 必须是数字格式
    const E_VALIDATE_GT = 'e_validate_gt'; // {:attr} 需要大于 {:rule}


}